/**
 * 创建某家公司，预想，创建成功后会生成该公司的数据库。内部数据只能在enoad_service数据库中看到。
 * 包含公司上限人数。
 */
var mongodb = require("./db.ts");
var settings = require("../settings.ts");
var ObjectID = require("mongodb").ObjectID;

const companyName = "SysRbac_Companys";

function Companys(company) {
  this.companyName = company.companyName; //公司名称
  this.companyCap = company.companyCap; //公司缩写
  this.companyNum = company.companyNum; //所有用户数量
  this.companyCreateTime = company.companyCreateTime; //创建时间，时间戳
  this.companyUpdateTime = company.companyUpdateTime; //更新时间，时间戳
}

//存储部门信息
Companys.prototype.save = function (callback) {
  var depart = {
    companyName: this.companyName, //公司名称
    companyCap: this.companyCap, //公司缩写
    companyNum: this.companyNum, //所有用户数量
    companyCreateTime: this.companyCreateTime, //创建时间，时间戳
    companyUpdateTime: this.companyUpdateTime, //更新时间，时间戳
  };
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
      //错误，返回 err 信息
    }
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection(companyName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      collection.insert(depart, { safe: true }, function (err, user) {
        if (err) {
          return callback(err);
          //错误，返回 err 信息
        }
        callback(null, user.ops[0]);
        //成功！err 为 null，并返回存储后的用户文档
      });
    });
  });
};

Companys.get = function (name, callback) {
  //读取 users 集合
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection(companyName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      //查找用户名（name键）值为 name 一个文档
      collection.findOne({ name: name }, function (err, user) {
        if (err) {
          return callback(err);
          //失败！返回 err 信息
        }
        callback(null, user);
        //成功！返回查询的用户信息
      });
    });
  });
};


//获取全部部门信息。
Companys.getAllCompanys = function (callback) {
  //打开数据库
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection(companyName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = {};
      //根据 query 对象查询文章
      collection
        .find(query)
        .sort({ time: -1 })
        .toArray(function (err, objects) {
          if (err) {
            return callback(err); //失败！返回 err
          }
          callback(null, objects); //成功！以数组形式返回查询的结果
        });
    });
  });
};

Companys.findCompanyById = function (id, callback) {
  //读取 users 集合
  mongodb.connect((error) => {
    if (error) {
      return callback(error);
    }
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection(companyName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = { _id: "" };
      if (id) {
        query._id = ObjectID(id);
      }
      //根据 query 对象查询文章
      collection.findOne(query, function (err, ob) {
        if (err) {
          return callback(err); //失败！返回 err
        }
        callback(null, ob); //成功！以数组形式返回查询的结果
      });
    });
  });
};

Companys.update = function (id, object, callback) {
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
      //错误，返回 err 信息
    }
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection(companyName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      //生成一个实体配置信息
      collection.updateOne(
        { _id: ObjectID(id) },
        { $set: object },
        function (err) {
          if (err) {
            return callback(err);
          }
          callback(null, { ...object, _id: id });
        }
      );
    });
  });
};

Companys.deleteById = function (id, callback) {
  //打开数据库
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(settings.db); // 获取数据库
    DataBase.collection(companyName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = { _id: "" };
      if (id) {
        query._id = ObjectID(id);
      }
      //根据 query 对象查询文章
      collection.deleteOne(query);
      callback(null); //删除成功
    });
  });
};

module.exports = Companys;
